home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Magazin/MacEasy 12
/
Mac Magazin and MacEasy Magazine CD - Issue 12.iso
/
Sharewarebibliothek
/
Anwendungen
/
Wissenschaft & Technik
/
Yorick
/
yorick11-fpu folder
/
include
/
readn.i
< prev
next >
Wrap
Text File
|
1995-04-03
|
2KB
|
57 lines
/*
READN.I
Provides a handy way to read numbers from a file, skipping
non-numeric tokens.
$Id: readn.i,v 1.1 1993/08/27 18:50:06 munro Exp $
*/
/* Copyright (c) 1994. The Regents of the University of California.
All rights reserved. */
func raw_read_n(f, &n0, &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9)
/* DOCUMENT raw_read_n, f, n0, n1, n2, ...
grabs the next numbers N0, N1, N2, ... from file F, skipping over
any whitespace, comma, semicolon, or colon delimited tokens which
are not numbers. (Actually, only the first and last characters of
the token have to look like a number -- 4xxx3 would be read as 4.)
***WARNING*** at most ten Ns are allowed
The Ns can be arrays, provided all have the same dimensions.
SEE ALSO: read, rdline
*/
{
n= numberof(n0);
line= array(string);
for (i=1 ; i<=n ; i++) {
read_n_worker, line, f, n0, i; if (is_void(n1)) continue;
read_n_worker, line, f, n1, i; if (is_void(n2)) continue;
read_n_worker, line, f, n2, i; if (is_void(n3)) continue;
read_n_worker, line, f, n3, i; if (is_void(n4)) continue;
read_n_worker, line, f, n4, i; if (is_void(n5)) continue;
read_n_worker, line, f, n5, i; if (is_void(n6)) continue;
read_n_worker, line, f, n6, i; if (is_void(n7)) continue;
read_n_worker, line, f, n7, i; if (is_void(n8)) continue;
read_n_worker, line, f, n8, i; if (is_void(n9)) continue;
read_n_worker, line, f, n9, i;
}
}
func read_n_worker(&line, f, &var, i)
{
/* indirect flag necessary because can't store back into a
scalar using var(i)=... (sigh) */
if (indirect=dimsof(var)(1)) value= structof(var)();
for (;;) {
while (line) {
tok= strtok(line, ",;: \t");
line= tok(2);
len= strlen(tok(1));
if (len && strmatch("0123456789.",strpart(tok(1), len:len)) &&
(indirect? sread(tok(1), value) : sread(tok(1), var))) {
if (indirect) var(i)= value;
return;
}
}
line= rdline(f);
if (!line) error, "premature end of file in read_n";
}
}